'use strict';

const router = require('koa-router')();
const fs = require('fs');

// 1、遍历并处理 所有的路由定义文件

// 2、针对每一个路由定义文件，引入并且遍历处理 所有的路径和异步函数


function getRouteFiles(filePath) {
    // 如果没有传入参数，默认查找目录为当前目录
    let tmpPath = filePath || __dirname;

    // 读取目录下所有文件或者文件夹
    let files = fs.readdirSync(tmpPath);
    // 过滤，查找所有的路由定义文件（以.js结尾，并且不是index.js的文件）
    let routeFiles = files.filter(item => {
        return item.endsWith('.js') && item !== 'index.js';
    });
    // 返回所有的路由定义文件（数组）
    return routeFiles;
}

function registerRoute(router, routeFiles) {
    // 遍历所有路由定义文件
    routeFiles.forEach(item => {
        // 拼接路由文件的完整路径
        let tmpPath = __dirname + '/' + item;
        // 引入路由定义模块/文件
        let obj = require(tmpPath);
        // 遍历 引入的对象(路由定义暴露的必须是一个对象)
        for (let key in obj) {
            // key是一个字符串 类似get /user的形式
            // 可以借助字符串函数split 分割为数组
            let tmpArr=key.split(' ');
            let routeUrl = tmpArr[1];
            let routeMethod = tmpArr[0];
            let routeFunction = obj[key];
            if (routeMethod === 'get') {
                router.get(routeUrl, routeFunction);
            } else if (routeMethod === 'post') {
                router.post(routeUrl, routeFunction);
            } else if (routeMethod === 'put') {
                router.put(routeUrl, routeFunction);
            } else if (routeMethod === 'delete') {
                router.delete(routeUrl, routeFunction);
            } else {

            }
            // router.get(key, obj[key]);
        }
    });
    return router.routes();
}

module.exports = function () {
    let routeFiles = getRouteFiles();
    let fn = registerRoute(router, routeFiles);
    return fn;
};